/**
 * @class PR.controller.Antecedentes
 * @extends Ext.app.Controller
 * 
 * @author José Luis Landero
 * @version 0.9 2011-08-10
 */
Ext.ClassManager.create('PR.controller.Antecedentes', {
	extend: 'Ext.app.Controller',
	views: ['catalogos.antecedentes.Grid'],
	stores: ['Antecedentes'],
	models: ['Antecedente'],
	requires: ['PR.util.Namespace'],
	
	/**
	 * Array destinado para contener los widgets que se añadan al modulo y poder
	 * redimensionarlos sin usar un ViewPort
	 */
	widgets: [],
	
	init: function() {
		var antecedentesStore = Ext.getStore('Antecedentes');
		antecedentesStore.addListener('read', this.onAntecedentesLoad);
		antecedentesStore.addListener('write', this.afterWriteAntecedente);
		Ext.EventManager.onWindowResize(this.onWindowResizeListener, this);
		
		this.control({
			'#add-antecedente-button': {
				click: this.addAntecedente
			},
			'#antecedentes-grid': {
				render: this.onGridRender
			},
			'#antecedentes-grid actioncolumn': {
				click: this.onClickActionColumn
			}
		});
		
		antecedentesStore.load({
			start: 0,
			limit: 10
		});
	},
	
	/**
	 * Función que escucha al evento onWindowResize, es la encargada de aplicar
	 * el redimensionado a los widgets contenidos en {widget}.
	 */
	onWindowResizeListener: function() {
		for (var i = 0, l = this.widgets.length; i < l; i++) {
			this.widgets[i].doLayout();
		}
	},
	
	onGridRender: function(cmp, options) {
		cmp.editor.addListener('edit', this.afterEdit);
	},
	
	addAntecedente: function(button, event) {
		if (Ext.getStore('Antecedentes').getAt(0) && Ext.getStore('Antecedentes').getAt(0).get('id') == 0) {
			Ext.Msg.alert('Acción no permitida', 'Ya existe un nuevo registro siendo editado');
			return false;
		}
		
		var grid = Ext.getCmp('antecedentes-grid');
		Ext.getStore('Antecedentes').insert(0, new PR.model.Antecedente());
		grid.editor.startEdit(0, 0);
		grid.editor.addCancelListener('click', this.afterEdit);
	},
	
	afterEdit: function(editor, object) {
		var store = Ext.getStore('Antecedentes');
		if (editor.text == 'Cancel' && store.getAt(0).get('id') == 0) {
			store.removeAt(0);
			
			return;
		}
		
		Ext.getCmp('antecedentes-grid').getView().setLoading(true);
	},
	
	afterWriteAntecedente: function(store, operation) {
		Ext.getCmp('antecedentes-grid').getView().setLoading(false);
		if (operation && operation.complete) {
			var response = Ext.JSON.decode(operation.response.responseText, true);
			
			if (operation.response.status == 200) {
				Ext.Msg.alert('¡Exito!', response.message);
				
				return;
			}
			
			Ext.Msg.alert('¡Error!', response.message);
		}
	},
	
	onClickActionColumn: function(grid, cell, rowIndex, colIndex, e) {
		if (e.target.className.indexOf('delete-antecedente-button') != -1) {
			this.deleteAntecedente(rowIndex);
		}
	},
	
	deleteAntecedente: function(rowIndex) {
		Ext.getStore('Antecedentes').removeAt(rowIndex);
	},
	
	onAntecedentesLoad: function(store) {
		if (store.getCount() == 0) {
			Ext.Msg.alert('Búsqueda sin resultados', 'Aún no se han guardado antecedentes');
		}
	}
});